package com.cloudkinto.service.order.vo.bigcommerce;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

@NoArgsConstructor
@Data
public class OrderBigComProductEntity {
    @JsonProperty("id")
    private Long id;
    @JsonProperty("order_id")
    private Long orderId;
    @JsonProperty("product_id")
    private Long productId;
    @JsonProperty("order_address_id")
    private Long orderAddressId;
    @JsonProperty("name")
    private String name;
    @JsonProperty("name_customer")
    private String nameCustomer;
    @JsonProperty("name_merchant")
    private String nameMerchant;
    @JsonProperty("sku")
    private String sku;
    @JsonProperty("upc")
    private String upc;
    @JsonProperty("type")
    private String type;
    @JsonProperty("base_price")
    private String basePrice;
    @JsonProperty("price_ex_tax")
    private String priceExTax;
    @JsonProperty("price_inc_tax")
    private String priceIncTax;
    @JsonProperty("price_tax")
    private String priceTax;
    @JsonProperty("base_total")
    private String baseTotal;
    @JsonProperty("total_ex_tax")
    private String totalExTax;
    @JsonProperty("total_inc_tax")
    private String totalIncTax;
    @JsonProperty("total_tax")
    private String totalTax;
    @JsonProperty("weight")
    private String weight;
    @JsonProperty("quantity")
    private Integer quantity;
    @JsonProperty("base_cost_price")
    private String baseCostPrice;
    @JsonProperty("cost_price_inc_tax")
    private String costPriceIncTax;
    @JsonProperty("cost_price_ex_tax")
    private String costPriceExTax;
    @JsonProperty("cost_price_tax")
    private String costPriceTax;
    @JsonProperty("is_refunded")
    private Boolean isRefunded;
    @JsonProperty("quantity_refunded")
    private Integer quantityRefunded;
    @JsonProperty("refund_amount")
    private String refundAmount;
    @JsonProperty("return_id")
    private Integer returnId;
    @JsonProperty("wrapping_name")
    private String wrappingName;
    @JsonProperty("base_wrapping_cost")
    private String baseWrappingCost;
    @JsonProperty("wrapping_cost_ex_tax")
    private String wrappingCostExTax;
    @JsonProperty("wrapping_cost_inc_tax")
    private String wrappingCostIncTax;
    @JsonProperty("wrapping_cost_tax")
    private String wrappingCostTax;
    @JsonProperty("wrapping_message")
    private String wrappingMessage;
    @JsonProperty("quantity_shipped")
    private Integer quantityShipped;
    @JsonProperty("fixed_shipping_cost")
    private String fixedShippingCost;
    @JsonProperty("ebay_item_id")
    private String ebayItemId;
    @JsonProperty("ebay_transaction_id")
    private String ebayTransactionId;
    @JsonProperty("option_set_id")
    private Integer optionSetId;
    @JsonProperty("parent_order_product_id")
    private Object parentOrderProductId;
    @JsonProperty("is_bundled_product")
    private Boolean isBundledProduct;
    @JsonProperty("bin_picking_number")
    private String binPickingNumber;
    @JsonProperty("external_id")
    private Object externalId;
    @JsonProperty("fulfillment_source")
    private String fulfillmentSource;
    @JsonProperty("brand")
    private String brand;
    @JsonProperty("applied_discounts")
    private List<AppliedDiscountsDTO> appliedDiscounts;
    @JsonProperty("product_options")
    private List<ProductOptionsDTO> productOptions;
    @JsonProperty("configurable_fields")
    private List<?> configurableFields;
    @JsonProperty("gift_certificate_id")
    private Object giftCertificateId;
    @JsonProperty("event_name")
    private Object eventName;
    @JsonProperty("event_date")
    private Object eventDate;

    @NoArgsConstructor
    @Data
    public static class AppliedDiscountsDTO {
        @JsonProperty("id")
        private String id;
        @JsonProperty("amount")
        private String amount;
        @JsonProperty("name")
        private String name;
        @JsonProperty("code")
        private Object code;
        @JsonProperty("target")
        private String target;
    }

    @NoArgsConstructor
    @Data
    public static class ProductOptionsDTO {
        @JsonProperty("id")
        private Integer id;
        @JsonProperty("option_id")
        private Integer optionId;
        @JsonProperty("order_product_id")
        private Integer orderProductId;
        @JsonProperty("product_option_id")
        private Integer productOptionId;
        @JsonProperty("display_name")
        private String displayName;
        @JsonProperty("display_name_customer")
        private String displayNameCustomer;
        @JsonProperty("display_name_merchant")
        private String displayNameMerchant;
        @JsonProperty("display_value")
        private String displayValue;
        @JsonProperty("display_value_customer")
        private String displayValueCustomer;
        @JsonProperty("display_value_merchant")
        private String displayValueMerchant;
        @JsonProperty("value")
        private String value;
        @JsonProperty("type")
        private String type;
        @JsonProperty("name")
        private String name;
        @JsonProperty("display_style")
        private String displayStyle;
    }
}
